{{tag>Maverick installation media_center sécurité raid tutoriel BROUILLON}}
----
====== Installation d'un centre multimédia de salon sécurisé ======
<note>__**Installation d'Ubuntu**__
  - [[tutoriel:obtenir_cd_ubuntu|Obtention du CD-ROM d'installation d'Ubuntu]]
  - **Installation**
  - [[:tutoriel:completer_installation_ubuntu|Compléter l'installation d'Ubuntu]]
</note>
===== Avant-Propos =====
Cet article vise à fournir la démarche pour l'installation d'un ordinateur de salon avec comme préoccupations :
  - La sécurité, à travers l'utilisation de chiffrement total de disque-dur et un renforcement de l'accès par le réseau.
  - La performance, avec l'utilisation d'un RAID.
  - L'accessibilité à l'usage, en optant pour une Wiimote comme outil de contrôle.

Ce tutorial pars des pré-requis suivant :
  * Vous envisagez de n'installer qu'un seul système d'exploitation sur votre machine
  * Toutes les données de vos disques-durs sont conservées sur un autre support
  * Vous avez déjà [[:amorcage|amorcé]] le Live-CD
  * Votre [[:wiki:glossaire#BIOS]] supporte l'amorçage sur un disque qui dispose d'une table de partition [[http://fr.wikipedia.org/wiki/GUID_Partition_Table|GPT]]

===== Limites du concept =====
Les 2 derniers points sont déjà relativement bien traités sur Internet, ce tutoriel se concentrera donc sur la première problématique. Même si le niveau de sécurité n'est pas optimum, il représentera malgré tout un niveau qui pourra dissuader un bon nombre de personnes malveillantes. Le concept vise à placer une grande partie du système sur un support chiffré. Seul le /boot sera accessible à l'attaquant, votre machine sera donc vulnérable aux attaques de type [[http://theinvisiblethings.blogspot.com/2009/10/evil-maid-goes-after-truecrypt.html|evil maiden (en)]] (l'attaquant accède à votre machine pour y placer un /boot corrompu qui interceptera la clé de déchiffrement de votre système de fichiers).

Des solutions existent pour parer ces attaques mais ne serons pas mise en place dans un premier temps : 
  - La première solution consiste à placer le /boot sur un support qui ne sera pas accessible à l'attaquant ; classiquement une clef USB que vous placerez sous surveillance constante. La machine sera toujours vulnérable à une attaque de type [[http://theinvisiblethings.blogspot.com/2009/10/evil-maid-goes-after-truecrypt.html|evil maiden (en)]], mais compliquera considérablement la tâche de l'attaquant puisque celui-ci devra s'attaquer au [[:grub|GRUB]] ou au [[:wiki:glossaire#BIOS]]. Il devient plus simple de placer un [[http://fr.wikipedia.org/wiki/Keylogger|keylogger]] matériel sur le clavier.
  - Une deuxième solution s'appuie sur les puces dites [[http://fr.wikipedia.org/wiki/Trusted_Platform_Module|TPM]]. Des mécanismes matériels entrent en scène pour s'assurer que le [[:wiki:glossaire#BIOS]] n'a pas été modifié, le [[:wiki:glossaire#BIOS]] vérifie que le GRUB n'a pas été modifié, et le [[:grub|GRUB]] vérifie que le /boot n'a pas été modifié. On obtient ainsi une chaine de confiance qui garanti que le système n'a pas été corrompu. Cette technique est complexe à mettre en place et la communauté du libre n'est pas encore enclin à promouvoir un système qui cachent aussi des effets secondaires pervers [[http://www.gnu.org/philosophy/can-you-trust.fr.html|source]].

Côté sécurité réseau, nous mettrons en place une protection contre les indésirables avec l'outil [[:moblock|blockcontrol]] (anciennement appelé moblocker). Cet outil permet par exemple d'empêcher les connexions vers ou depuis des IPs appartenant à des sociétés qui relève les addresses IP procédant à un téléchargement illicite.

===== Préparation du domaine de stockage =====
La topologie cible est la suivante :
<code>
DISK0 : [[gpt][bios-grub][classic ][classic ][========== raid-linux ===========]]
DISK1 : [[gpt][bios-grub][classic ][classic ][========== raid-linux ===========]]
LUKS  : [                          [swapLUKS][========== LUKS contnr ==========]]
LVM   : [                                    [=========== raid0mvg ============]]
FS    : [                [= /boot=][==swap==][= / =][========= /home ==========]]</code>

  * Nous allons utilisez le système de partitionnement [[http://fr.wikipedia.org/wiki/GUID_Partition_Table|GPT]] à la place du traditionnel (et obsolète-né) [[http://fr.wikipedia.org/wiki/Master_Boot_Record|MBR]] pour permettre l'installation d'un secteur d'amorçage supérieur à 512KiB. En effet notre [[:grub|GRUB]] risque de rapidement devenir obèse avec tout ce qu'on attends de lui. Pour des questions de performance, nous allons aligner les partitions nous aurons donc 2 [[:grub|GRUBs]] et 2 /boot.
  * Les 2 partitions /boot profiterons d'un [[http://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_1_:_Disques_en_miroir|RAID1]] logiciel.
  * Les partitions de [[http://fr.wikipedia.org/wiki/M%C3%A9moire_virtuelle#Swapping|swap]] ne seront pas dans le RAID pour des questions de performances mais seront chiffrés malgré tout. Les données stockés dans le [[http://fr.wikipedia.org/wiki/M%C3%A9moire_virtuelle#Swapping|swap]] peuvent en effet contenir des informations sensibles ou utiles à un attaquant. L'utilisation de ces partitions de swap est optionnelle. Vous pouvez à la place utiliser un [[:swap#definir_un_fichier_comme_fichier_d_echange_avance|fichier d'échange]], ce qui simplifiera votre installation.
  * Le reste du système sera placé dans un conteneur [[:lvm|LVM2]], lui-même dans un conteneur [[http://www.k-tux.com/luks-quelques-grammes-de-paranoia-pour-des-donnees-bien-protegees|LUKS]], lui-même dans une grappe RAID une combinaison de performance, sécurité et flexibilité.

==== Nettoyage des support physique ====
<note warning>Toutes les données sur vos disques seront supprimées et impossible à récupérées (même avec un logiciel de récupération). C'est un peu le but aussi.</note>
Cette opération peut être très longue mais il est conseillé de le faire. Pour chaque disques durs, lancez cette commande qui tournera en tâche de fond :
<code>
shred --iterations=N --verbose /dev/sda &
shred --iterations=N --verbose /dev/sdb &
...
</code>
N correspond au nombre de passes de nettoyage. Adaptez cette valeur en fonction du degré de confidentialité des données présentes en clair sur le support. 1 est déjà une bonne valeur.

==== Partitionnement ====
Voici le schéma de partionnement ciblé :
^ Nom    ^             Taille            ^   FS   ^      Type de partition     ^
^ GRUB-x |            0,008 Go           |  Vide  |Partition de démarrage BIOS |
^ Boot-x |              1 Go             |  Vide  |Partition RAID Linux        |
^ Swap-x | 1/2 à 1 votre quantité de RAM |  Vide  |Partition d'échange Linux   |
^ MyFS-x |            le reste           |  Vide  |Partition RAID Linux        |

=== La méthode graphique ===
Pour le [[http://fr.wikipedia.org/wiki/Partition_de_disque_dur|partitionnement]] nous allons utiliser l'utilitaire de disque, plutôt que GParted, qui nous simplifiera la vie.
Lancez l'Utilitaire de disque : System > Administration > Disk Utility.
Pour chacun de vos disque-durs, créez une [[http://fr.wikipedia.org/wiki/Partition_de_disque_dur#Tables_de_partitions|table de partition]] [[http://fr.wikipedia.org/wiki/GUID_Partition_Table|GPT]] : Sélectionnez le disque > Formater le disque > Table de partitions GUID.

Pour chacun de vos disque-durs, créez ces 4 [[http://fr.wikipedia.org/wiki/Partition_de_disque_dur|partitions]] dans cet ordre.
Sélectionnez votre disque-dur > Cliquez sur l'espace //libre// > Créer une partition.
Pour changez le type de partition, créez d'abord votre partition. Ensuite sélectionnez là et cliquez sur Modifier la partition.

=== La méthode en ligne de commande ===
Vous n'êtes pas bleusaille? Très bien. Débrouillez-vous avec ce bref rappel :
^ Action ^ Commande ^
| Lancer le logiciel de partionnement | sudo parted /dev/sdX |
| Écrire une table de partitions GPT | mklabel gpt |
| Ajouter une partition | mkpart nom debut fin |
==== RAID / LUKS / LVM ====
Maintenant que votre schéma de partitionnement est appliqué nous allons assembler le RAID, y créer un conteneur [[http://www.k-tux.com/luks-quelques-grammes-de-paranoia-pour-des-donnees-bien-protegees|LUKS]] qui sera partitioné avec du LVM.

=== RAID ===
Pour assembler les grappes RAID nous avons besoin de [[apt://mdadm]]. Notre ///boot// sera dans un [[http://fr.wikipedia.org/wiki/RAID_%28informatique%29#RAID_1_:_Disques_en_miroir|RAID1]] et [[:grub|GRUB]] impose que si la partition de ///boot// est dans un RAID alors la version des [[metadata]] [[http://grub.enbug.org/LVMandRAID|doit être la 0.90]]. Pour cette raison, nous n'utiliserons pas l'Utilitaire de disque pour la création du RAID (qui utilise la version 1.20). Par contre, pour le RAID qui contiendra la racine nous utiliserons les metadata version 1.20. Pourquoi? La version 0.90 place les metadata à la fin de la partition. Pour notre dernière partition, la fin de la partition correspond aussi à la fin du disque. Lorsque mdadm cherche les metadata sur le disque il peut croire que tout le disque appartient au RAID (expérience vécu). Mais utiliser la v1.20 des metadata entraine un autre problème comme l'alignement des block LUKS et LVM, ce qui peut nous empêcher d'atteindre des performances optimales.
N'hésitez pas à changer votre schéma de partitions pour combiner l'utilisation de plusieurs famille de RAID par exemple.

Dans tout les cas, **ne mettez pas** vos partitions de [[http://fr.wikipedia.org/wiki/M%C3%A9moire_virtuelle#Swapping|swap]] dans un RAID. Le [[http://fr.wikipedia.org/wiki/M%C3%A9moire_virtuelle#Swapping|swap]] n'est pas connu pour sa séquentialité des accès, il vaut mieux avoir de petits blocs de 4ko plutôt que les 128ko tout boudinés d'un RAID...

<code>
mdadm --create /dev/md0 --metadata=0.90 --raid-devices=2 --chunk=64 --level=1 /dev/sd[ab]2
mdadm --create /dev/md1 --metadata=1.2 --raid-devices=2 --chunk=128 --level=0 /dev/sd[ab]4
</code>

<note tip>Si pour une raison ou une autre vous étiez ammené à devoir assembler votre raid (càd, à le rendre disponible sans le re-créer) vous remarquerez que /dev/md1 nécessite qu'on lui précise ses 2 partitions alors que md0 le fait automatiquement.</note>

=== LUKS ===
Le [[http://fr.wikipedia.org/wiki/Mode_d%27op%C3%A9ration_%28cryptographie%29|mode d'opération]] que nous allons utiliser est [[http://en.wikipedia.org/wiki/Disk_encryption_theory#XTS|XTS (en)]], plus adapté au chiffrement de disque.

Nous n'utiliserons pas d'[[http://en.wikipedia.org/wiki/Disk_encryption_theory#ESSIV|ESSIV (en)]] car [[http://en.wikipedia.org/wiki/Disk_encryption_theory#XTS|XTS (en)]] embarque son propre mécanisme pour choisir son [[http://fr.wikipedia.org/wiki/Vecteur_d%27initialisation|vecteur d'initialisation]] (IV). Ajouter l'[[http://en.wikipedia.org/wiki/Disk_encryption_theory#ESSIV|ESSIV (en)]] apporterai un gain négligeable de protection comparé à son impact sur les performances [[http://seclists.org/basics/2009/May/253|source]] [[http://code.google.com/p/cryptsetup/wiki/FrequentlyAskedQuestions#5._Security_Aspects|source officielle]]. Nous utiliserons du plain64 pour nos IV parce qu'en fonction de la taille de vos disques et de la taille des blocs, l'utilisation du plain(32bits) peut introduire une faille de sécurité du à la répétition des IV.

Le chiffrement que nous utiliserons est [[http://fr.wikipedia.org/wiki/Serpent_%28cryptographie%29|Serpent]]. Il offre un niveau de protection supérieur au [[http://fr.wikipedia.org/wiki/Rijndael|Rijndael]] (dont la version bridée, l'[[http://fr.wikipedia.org/wiki/Advanced_Encryption_Standard_process|AES]], est d'avantage connue) et semble plus rapide que ce dernier sur les système 64bits [[http://www.saout.de/pipermail/dm-crypt/2009-August/000046.html|source (à vérifier)]].

Pour le container [[http://www.k-tux.com/luks-quelques-grammes-de-paranoia-pour-des-donnees-bien-protegees|LUKS]] en RAID, on va utiliser l'option //align-payload// (qui permet de modifier la où commence les blocs de données du container) pour aligner le container avec notre RAID. Par défaut cette valeur est de 8 (secteurs x 512o = 4Ko) que nous plaçons à 512. 
La formule optimale est : //(chunk_size/512o)*qt_data_disk//. Un RAID5 de 3 disques aura une valeur de qt_data_disk de 2 un RAID0 de 3 disques aura une valeur de 3. Pensez à adapter cette valeur si vous avez personnalisé la taille du chunk de vos RAIDs.
<code>
cryptsetup luksFormat --cipher=serpent-xts-plain64 --hash=sha256 --key-size=512 /dev/sda3
cryptsetup luksFormat --cipher=serpent-xts-plain64 --hash=sha256 --key-size=512 /dev/sdb3
cryptsetup luksFormat --cipher=serpent-xts-plain64 --hash=sha256 --key-size=512 --align-payload=512 /dev/md1
</code>

Vous pouvez maintenant déverrouiller les conteneurs [[http://www.k-tux.com/luks-quelques-grammes-de-paranoia-pour-des-donnees-bien-protegees|LUKS]] pour obtenir vos partitions mappées dans /dev/mapper/ : 
<code>
cryptsetup luksOpen /dev/sda3 unlocked-swapa
cryptsetup luksOpen /dev/sdb3 unlocked-swapb
cryptsetup luksOpen /dev/md1 unlocked-md1
</code>

=== LVM ===
Les disques sont partitionnés, les RAID assemblés et les conteneurs LUKS en place et déverrouillés ; nous allons pouvoir segmenter notre espace de stockage pour y placer les système de fichiers (ou //formater//).

La création d'un [[:lvm|LVM]] se fait en 4 petites étapes :
  - L'installation [[apt://lvm2]]
  - On désigne les volumes physique (disques-durs, RAIDs, conteneur LUKS déverrouillés, ...) qui seront gérés par LVM.
  - On regroupe ensuite ces volumes physiques pour former un groupe de volumes, un gros volume physique en somme.
  - On découpe ensuite ce groupe de volumes en volumes logiques, des partitions en somme.

<note>Même si le LVM permet de regrouper plusieurs volumes physique pour n'en former qu'un, ce n'est pas un équivalent au RAID. Le LVM se concentre sur l'exploitation logique des volumes (partionnement, redimenssionnement des partitions, augmentation de la taille d'un volume, ...) tandis que le RAID se préoccupe de l'exploitation matériel (meilleurs performances, tolérance aux pannes, ...)</note>

Les 3 premières étapes se font simplement :
<code>
apt-get install lvm2
pvcreate -M2 --dataalignement 128k /dev/mapper/unlocked-md1
vgcreate rootvg /dev/mapper/unlocked-md1
</code>

<note>Les options passées lors du //pvcreate// permettent d'aligner notre LVM à notre RAID dont la taille des //chunk// est de 128kio. Elles signifient respectivement //utiliser la nouvelle version de superblock// et //le superblock doit avoir une taille multiple de 128kio//</note>

Créons maintenant le volume logique (partition) qui accueillera la racine de notre système de fichier, ici de 80Gio :
<code>
lvcreate --name systemlv --size 80g rootvg
</code>

On veut maintenant créer un autre volume logique pour accueillir notre ///home// avec le reste d'espace disponible.
Commençons par se renseigner sur l'espace qu'il nous reste :
<code>
>>> vgdisplay

 --- Volume group ---
 VG Name               rootvg
 System ID             
 Format                lvm2
 Metadata Areas        1
 Metadata Sequence No  2
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                1
 Open LV               0
 Max PV                0
 Cur PV                1
 Act PV                1
 VG Size               966,51 GiB
 PE Size               4,00 MiB
 Total PE              237187
 Alloc PE / Size       20480 / 80,00 GiB
 Free  PE / Size       226947 / 886,51 GiB
 VG UUID               bslw15-...-dsf54f
</code>

Il nous reste 226.947 PE de 4Mio soit 907788Mio. Affectons-les :
<code>lvcreate --name homelv --size 907788m rootvg</code>

=== Les systèmes de fichiers ===
Nous avons certes fini de créer nos //partitions// mais aux yeux d'Ubuntu ce sont chacune des volumes distinct. Ubuntu n'acceptera pas de s'installer sur ces volumes sans table de partitions. On va lui jouer un petit tour pour le piéger en créant nous mêmes le système de fichier. Cette étape est d'autant plus importante que nous devons de plus créer des systèmes de fichiers qui alignés à nos blocs logiques, on en profitera aussi pour désactiver la journalisation sur la partition de ///boot//

Cet alignement se fait en paramètrant les valeurs //stride// et //stripe-width// lors de la création du système de fichier. Les formules optimales sont :
  * stride = chunk_size / 4096o
  * stripe-width = stride x qt_data_disk (n pour RAID0, 1 pour RAID1, n-1 pour RAID5, ...)

<code>
mkfs.ext4 -b 4096 -E stride=16,stripe-width=16 -O ^has_journal -L boot /dev/md0
mkfs.ext4 -b 4096 -E stride=32,stripe-width=64 -L system /dev/mapper/rootvg-systemlv
mkfs.ext4 -b 4096 -E stride=32,stripe-width=64 -L home /dev/mapper/rootvg-homelv
mkswap /dev/mapper/unlocked-swapa
mkswap /dev/mapper/unlocked-swapb
</code>
==== Avancé : Evoluer son RAID0 vers un RAID5 ====
On l'a vu précédemment, votre système dispose d'une protection contre les pannes car votre //GRUB// et votre ///boot// sont sur une grappe RAID1. Par contre, votre /home et le reste du système sont sur un RAID0 ; une partie du système est donc plus sensible à la panne (le défaut d'un seul disque d'une grappe RAID0 entraine le défaut de toute la grappe). Une solution RAID propose de tolérer le défaut d'un ou de deux disques sans mettre en défaut toute la grappe : le RAID6. De cette façon, si un disque tombe en panne vous aurez un avertissement et pourrai changer le(s) disque(s) défaillant(s) sans avoir perdu vos données!

=== La sauvegarde ===
On ne peut plus convertir une grappe RAID de niveau 0 vers un autre niveau atteignable (niveaux 5 et 6, par exemple). Je vous propose d'envoyer un paquet de café d'arabica de Colombie aux développeurs de mdadm accompagné d'une requête d'ajout de fonctionnalité (ou plutôt de correction de regression par rapport à //raidreconf//).
Pour sauvegarder vos données sans en compromettre la sécurité vous devrez préparer votre nouveau disque comme décrit dans [[utilisateurs:lildadou:mediabunker#preparation_du_domaine_de_stockage|la partie préparation du domaine de stockage]]. Créez-y ensuite un container LUKS comme vu dans la [[utilisateurs:lildadou:mediabunker#raid_luks_lvm|la partie LUKS]]. Formatez, montez et copier votre ///home// et votre //racine// avec la commande suivante.
<code>cp -axv depart arrivee</code>

=== Le partitionnement ===
Pour des questions d'alignement, vous devez reproduire le même schèma de partitionnement que sur vos autres disques. Personnellement, j'affiche avec précision mon schéma de partionnement avec la commande :
<code>parted /dev/sdX unit s print</code>
pour ensuite les ré-appliquer sur le nouveau disque. Pour les habitués du RAID, sfdisk ne fonctionnera pas avec nos tables de partitions GPT.

=== Ajout d'un disque aux grappes RAID1 ===
=== Ajout d'un disque et changement de niveau d'un RAID0 ===

===== Installation et paramétrage du système =====
La préparation du domaine de stockage est maintenant terminée et Ubuntu peut y être installé.

==== Installation d'Ubuntu ====
  * Démarrez maintenant //Installer Ubuntu 10.10// sur votre Bureau.
  * Choisissez de mettre les mises à jour.
  * A l'écran **Allouer de l'espace disque** choisissez //Définir les partitions manuellement//
  * Modifiez les //Périphériques// suivant avec ces paramètres :

^Périphérique  ^ Utiliser comme ^ Formater? ^ Point de montage ^
^/dev/mapper/rootvg-homelv  | ext4 | Oui | /home |
^/dev/mapper/rootvg-systemlv  | ext4 | Oui | / |
^/dev/md0  | ext2 | Oui | /boot |
^  En chargeur d'amorçage, choisissez : **/dev/sda**  ^^^^
^  **Ne formatez pas /boot s'il est déjà en ext4 déjournalisé**  ^^^^

  * Lancez l'installation, préparez-vous un café et prenez le temps de répondre au quelques questions de l'installateur.
  * Lorsque l'installation est terminée, **ne redémarrer pas** votre ordinateur.

==== Paramètrage des services d'amorçage ====
Ubuntu est sur votre RAID chiffré! sauf qu'avec toutes ces couches (RAID, LUKS et LVM), l'installateur ne s'y retrouve plus et à besoin d'un coup de pouce pour comprendre comment démarrer votre machine.

TODOLIST :
  * DONE: Vérifier si /target est démonté à ce niveau : OUI
  * Vérifier le mappage utilisé par l'installateur pour générer son fstab : OK
  * Vérifier que les entrées dupliquées dans cryptroot ne causent pas de pb : pas de pb
  * Vérifier le nommage des modules
  * Justifier les modules invoqués (les scripts de généraion les invoquent?)
  * Proposer l'authentification forte pour déverrouiller //systemlv//

On se [[:chroot|chroote]] dans notre installation toute fraiche : 
<code>
mount /dev/mapper/rootvg-systemlv /target
mount /dev/md0 /target/boot
mount -t devpts devpts /dev/pts
mount -t proc /proc /target/proc
mount -t sysfs /sys /target/sys
mount --bind /dev /target/dev
chroot /target/
</code>

On va commencer par installer les fonctionnalités de RAID, LUKS et de LVM2 :
<code>apt-get install mdadm lvm2 cryptsetup</code>


<file text /etc/initramfs-tools/modules>
raid1
raid0
dm-crypt
dm-mod
serpent
sha256
xts
sd_mod
blkcipher
</file>

Vous vous souvenez que les partitions de swap ont chacune leurs propres conteneur LUKS? Plutôt que d'avoir à saisir à chaque démarrage leurs clefs, nous allons [[:dd#creer_un_fichier_de_100_octets_aleatoires|générer des clefs]] très sures (plus sure que n'importe quel mot de passe) à l'intérieur du conteneur chiffré du système (pour qu'elle ne soit pas exposées). Ainsi, lorsque l'on déverrouillera le conteneur du système Ubuntu déverrouillera tout seul les conteneur de swap.
<code>
dd if=/dev/urandom of=/etc/ssl/private/swapa.key bs=1 count=64
dd if=/dev/urandom of=/etc/ssl/private/swapb.key bs=1 count=64
dd if=/dev/urandom of=/etc/ssl/private/system.key bs=1 count=64
cryptsetup luksAddKey /dev/sda3 /etc/ssl/private/swapa.key
cryptsetup luksAddKey /dev/sdb3 /etc/ssl/private/swapb.key
cryptsetup luksAddKey /dev/md1 /etc/ssl/private/system.key
cryptsetup luksKillSlot --key-file /etc/ssl/private/swapa.key /dev/sda3 0
cryptsetup luksKillSlot --key-file /etc/ssl/private/swapb.key /dev/sdb3 0
</code>

Vous connaissez [[:fstab#le_fichier_fstab|fstab]]? [[:cryptsetup|crypttab]] c'est son complément pour les volumes chiffrés.
<file text /etc/crypttab>
# <target name>	<source device>					<key file>			<options>
unlocked-md1	/dev/md1					none				luks,retry=1
unlocked-swapa	UUID=x x x x -uuid- de -/dev/sda3 x x x x	/etc/ssl/private/swapa.key	luks,swap
unlocked-swapb	UUID=x x x x -uuid- de -/dev/sdb3 x x x x	/etc/ssl/private/swapb.key	luks,swap
</file>

Il faut demander à l'initramfs de nous demander de saisir un mot de passe et de déverrouiller avant de lancer //init//. Pour cela nous allons ajouter un hooker pour que y saisir notre mot de passe et un script de génération de configuration (pour dire ce qu'on déverrouille).
<code>
ln --symbolic /usr/share/initramfs-tools/hooks/cryptroot /etc/initramfs-tools/hooks/
ln --symbolic /usr/share/initramfs-tools/scripts/local-top/cryptroot /etc/initramfs-tools/scripts/local-top/
touch /etc/initramfs-tools/conf.d/cryptroot
</code>
Le script de génération a quelques défauts :
  - Il n'écrit pas la configuration si le fichier cryptroot n'est pas présent (d'où le [[:touch|touch]]).
  - A chaque update-initramfs, il dupplique les entrées de configuration ; c'est pas très propre.

Maintenant qu'on a bien détailler au système la procédure de démarrage, on va appliquer nos modifications :
<code>update-initramfs -k all -c</code>

Vous pouvez maintenant redémarrer :)
<code>
exit
umount /target/boot
umount /target/proc
umount /target/sys
umount /target/dev
umount /target/
vgchange -an rootvg
cryptsetup luksClose /dev/mapper/unlocked-swapa
cryptsetup luksClose /dev/mapper/unlocked-swapb
cryptsetup luksClose /dev/mapper/unlocked-md1
reboot now
</code>

===== Installation des services mediacenter =====
  - Remplacer les clef SSH. Générer de nouveaux groupes d'échanges Diffie-Hellman :
<code>ssh-keygen -G candidates -b 4096</code>
Tester la primalité du groupe d'échange :
<code>ssh-keygen -f candidates -T moduli</code>
Remplacer l'ancien groupe d'échange (/etc/ssh/moduli) par le nouveau. Vous pouvez re-générer d'avantage de groupes et les concatener ensemble pour plus de sécurité (il faut juste qu'ils soient de la même taille).

  - Installer fail2ban
  - [[:xbmc|Installation de XBMC]]
  - wiimote 64bits :
<code>apt-get install libbluetooth-dev g++ libcwiid1 xbmc-eventclients-common</code>
compile, copier libwiiuse.so dans /usr/local/bin, modifier le makefile pour utiliser /usr/local/bin/libwiiuse.so, compiler

  - aparté sur les nom de domaine (Free, dyndns, ...)
  - ajout autorité racine
  - génération certificat SSL
Générer une clef privée RSA :
<code>
openssl genrsa -out /etc/ssl/private/transmission.4096.key 4096
openssl dhparam -out /etc/ssl/private/transmission.dh2048.key 2048
chmod o-r /etc/ssl/private/transmission.*
chown root:www-data /etc/ssl/private/transmission.*
</code>

On génère ensuite une [[http://en.wikipedia.org/wiki/Certificate_signing_request|CSR]] :
<code>openssl req -new -key /etc/ssl/private/transmission.4096.key</code>

Cette demande de signature ne dévoile pas d'informations à un attaquant cryptographiques, vous pouvez maintenant fournir cette requête de signature auprès d'une autorité de certification racine. Vous en trouverez pour quelques centaines d'euros... ou bien il y a CaCert (Open-source, soutenu par GNU) et StartSSL (privé, gratuit, d'avantage reconnu) :)
Ne pas oublier de concatener les certificats de la chaine de certification au votre (de l'intermediaire le plus bas au plus haut et commencant par le votre).

  - [[:tutoriel:comment_installer_un_paquet|installer transmission-daemon]] : [[apt://transmission-daemon]]. Binder l'interface d'écoute en IPv6 sur le localhost à cause des listes p2p incompletes.
  - install nginx série depuis les dépots des concepteurs (à jour et avec d'avantages d'options) :
<code>
add-apt-repository ppa:nginx/development
apt-get update
apt-get install nginx-full
</code>
<file - /etc/nginx/sites-available/transmission-web>
# Redirection HTTP vers HTTPS
server {
	listen				0.0.0.0:80;
	add_header			Cache-Control "public, must-revalidate";
	access_log			/var/log/nginx/transmission-proxy.access;
	error_log			/var/log/nginx/transmission-proxy.log;
	server_name			transmission.votre-domaine.net;
	
	location / {
		if ($host ~* ^(transmission\.votre-domaine\.net)$ ) {
			rewrite  ^/(.*)$  https://transmission.votre-domaine.net/$1 permanent;
		}
		return 444;
	}
}

server {
	### server port and name ###
	listen				0.0.0.0:443 ssl;
	listen				[votre:ip:v6]:443 ssl;
	server_name			transmission.votre-domaine.net;
	if ($host !~* ^(transmission.votre-domaine.net)$ ) { return 444; } #URL non matché par le domaine

	access_log			/var/log/nginx/transmission-proxy.access;
	error_log			/var/log/nginx/transmission-proxy.error;

	ssl on;
	ssl_certificate			/etc/ssl/certs/transmission.votre-domaine.net.4096.startssl.crt;
	#ssl_certificate		/etc/ssl/certs/transmission.votre-domaine.net.4096.crt;
	ssl_certificate_key		/etc/ssl/private/transmission.votre-domaine.net.4096.key;
	ssl_dhparam			/etc/ssl/private/transmission.dh2048.pem;
	
	### Add SSL specific settings here ###
	keepalive_timeout		60;
	ssl_session_cache		shared:SSL:10m;
	ssl_session_timeout		5m;

	###  Limiting Ciphers ###
	ssl_ciphers			DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA;
	#ssl_ciphers			AES256-SHA;
	ssl_prefer_server_ciphers	on;
	ssl_protocols			TLSv1;

	add_header			Cache-Control "public, must-revalidate";
	add_header			Strict-Transport-Security "max-age=2592000; includeSubdomains";
	add_header			Front-End-Https on;

	location / {
		proxy_pass		http://localhost:9091/;
		proxy_next_upstream	error timeout invalid_header http_500 http_502 http_503;

		### Set headers ####
		proxy_set_header	Host $host;
		proxy_set_header	X-Real-IP $remote_addr;
		proxy_set_header	X-Forwarded-For $proxy_add_x_forwarded_for;

		### Most PHP, Python, Rails, Java App can use this header ###
		proxy_set_header	X-Forwarded-Proto https;

		### By default we don't want to redirect it ####
		proxy_redirect		off;
	}
}
</file>

Activer l'accélération matérielle pour ATI (et installer les derniers pilotes) : http://wiki.cchtml.com/index.php/Ubuntu_Maverick_Installation_Guide#Installing_Proprietary_Drivers_a.k.a._Catalyst.2Ffglrx

==== Protection contre les spiders indésirables ====
  * install de <del>blockcontrol</del> pgld (PeerGuardian Daemon). [[http://papillon-butineur.blogspot.com/2010/05/ip-filter-peergardian-linux-pgl-succede.html|Tuto suivi]]

===== Voir aussi =====
  * [[http://alephnull.com/benchmarks/sata2009/index.html|Benchmark sur les différents niveaux de RAID avec plusieurs chunk-size et disque ainsi que l'impact de LUKS sur un RAID5 avec différents alignement-payload]]
  * [[http://www.korben.info/comment-chiffrer-une-partition-systeme-linux-ici-ubuntu.html|Comment chiffrer une partition système Linux (Korben)]]
  * **(en)** [[http://lfde.org/|Linux Full Disk Encryption]]
  * **(en)** [[https://wiki.archlinux.org/index.php/RAID_Encryption_LVM|RAID Encryption LVM]]
  * **(fr,pdf)** [[http://www.amossys.fr/publications/C&ESAR_2008-Amossys_article_TPM.pdf|Composant cryptographique TPM - Retours d'expériences et perspectives]]
  * **(en)** [[https://help.ubuntu.com/community/EncryptedFilesystemOnIntrepid|Documentation de la communauté offcielle]] (un peu vieux mais m'a débloqué pour le cryptroot script-hooking)
  * **(en)** [[http://xercestech.com/full-system-encryption-for-linux.geek|(Du vrai) Full system encryption for Linux]] [[http://michael.gorven.za.net/cgi-bin/hgwebdir.fcgi/grub/luks-old/|Lien pour le patch]]
  * **(en)** [[https://calomel.org/nginx.html|Reference : Configuration nginx]]